﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Project_2._2.ViewModels;
using Project_2._2.Models;
using Project_2._2.Extra;
using System.Web.Security;
using System.Text.RegularExpressions;


namespace Project_2._2.Controllers
{
    public class AdminController : Controller
    {
        //
        // GET: /Admin/
        private QuanLyThueXeEntities db = new QuanLyThueXeEntities();
        private Common cm = new Common();
        public ActionResult Default()
        {
            if (!Request.IsAuthenticated)
            {
                return RedirectToAction("Login", "Admin");
            }
            else
            {
                if (cm.CheckUserType(User.Identity.Name) == false)
                {
                   return RedirectToAction("Login", "Admin");
                }
                    
            }
            return View();
        }

        #region Login
        //get
        public ActionResult Login()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Login(Login_ViewModels person)
        {
            if (ModelState.IsValid)
            {
                if (person.captcha.CompareTo(Session["Captcha"]) != 0)
                    ModelState.AddModelError("Captcha", "Mã xác nhận không chính xác.");
                else
                {
                    if (cm.CheckLogin(person.TenDangNhap, person.Password))
                    {
                        if (cm.CheckUserType(person.TenDangNhap))
                        {
                            FormsAuthentication.SetAuthCookie(person.TenDangNhap, person.RememberMe);
                            return RedirectToAction("Default", "AdminPerson");
                        }
                        else
                            ModelState.AddModelError("", "Tai Khoan cua ban khong duoc quyen vao trang nay !");
                    }
                    else
                    {
                        ModelState.AddModelError("", "Tên đăng nhập hoặc mật khẩu không đúng.");
                    }
                }
            }

            return View(person);
        }
        #endregion

        #region Account detail
        public ActionResult Detail( string name)
        {
            if (!Request.IsAuthenticated)
            {
                return RedirectToAction("Login", "Admin");
            }
            else
            {
                if (cm.CheckUserType(User.Identity.Name) == false)
                {
                    return RedirectToAction("Login", "Admin");
                }
                else
                {
                    var ps = (from p in db.People where p.TenDangNhap.Equals(name) select p).FirstOrDefault();
                    return View(ps);
                }
            }
            
        }
        #endregion

        #region Change Password
        public ActionResult ChangePassword()
        {
            if (!Request.IsAuthenticated)
            {
                return RedirectToAction("Login", "Admin");
            }
            else
            {
                if (cm.CheckUserType(User.Identity.Name) == false)
                {
                    return RedirectToAction("Login", "Admin");
                }
                else
                {
                    
                    return View();

                }
            }
        }
        [HttpPost]
        public ActionResult ChangePassword( PasswordChange_ViewModels person)
        {
            if (ModelState.IsValid)
            {
                var ps = (from p in db.People where p.TenDangNhap == User.Identity.Name select p).First();
                string OldPass = FormsAuthentication.HashPasswordForStoringInConfigFile(person.OldPassword, "MD5");
                if (ps.MatKhau.Equals(OldPass))
                {
                    string NewPass = FormsAuthentication.HashPasswordForStoringInConfigFile(person.NewPassword, "MD5");
                    ps.MatKhau = NewPass;
                    UpdateModel(ps);
                    db.SaveChanges();
                    TempData["Message"] = "Đã lưu Thay đổi thành công .!";
                }
                else
                    ModelState.AddModelError("OldPassword", "Mật khẩu củ không đúng.");
            }
            return View();
        }
        #endregion

        #region Update
        public ActionResult Update( string name )
        {
            var ps = (from p in db.People where p.TenDangNhap.Equals(name) select p).FirstOrDefault();
            return View(ps);
        }

        [HttpPost]
        public ActionResult Update(FormCollection col)
        {
            if (string.IsNullOrEmpty(col["HoTen"]))
                ViewBag.error = "Họ tên không được để trống .";
            else if ((DateTime.Now.Year - DateTime.Parse(col["NgaySinh"]).Year) < 18)
                ViewBag.error ="Năm sinh không đủ 18 tuổi.";
            else if (string.IsNullOrEmpty(col["DienThoai"]))
                ViewBag.error = "Bạn chưa nhập số điện thoại .";
            else if (string.IsNullOrEmpty(col["Email"]))
                ViewBag.error = "Bạn chưa nhập Email .";
            else if (string.IsNullOrEmpty(col["DiaChi"]))
                ViewBag.error = "Bạn chưa nhập Địa Chỉ .";
            else 
            {  
                string phone = @"0[0-9]{9,10}";
                Match  m = Regex.Match(col["DienThoai"],phone,RegexOptions.IgnoreCase);
                if (m.Success)
	            {
		            string email = @"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}";
                    Match mail = Regex.Match(col["Email"], email, RegexOptions.IgnoreCase);
                    if (mail.Success)
                    {
                        var per = (from p in db.People where p.TenDangNhap.Equals(col["TenDangNhap"]) select p).FirstOrDefault();
                        per.HoTen = col["HoTen"];
                        per.NgaySinh = DateTime.Parse( col["NgaySinh"]);
                        per.GioiTinh = col["GioiTinh"];
                        per.DienThoai = col["DienThoai"];
                        per.Email = col["Email"];
                        per.DiaChi = col["DiaChi"];
                        UpdateModel(per);
                        db.SaveChanges();
                        TempData["Message"] = "Đã lưu Thay đổi thành công .!";
                    }
                    else
                        ViewBag.error = "Email không hợp lệ.";
	            }
                else
                {
                    ViewBag.error = "Số điện thoại bắt đầu là số 0, không được nhập chữ, từ 10 - 11 số.";
                }
                
                
            }


            return View();
        }
        #endregion

        #region LogOut
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult LogOut()
        {
            FormsAuthentication.SignOut();
            return RedirectToAction("Login", "Admin");
        }

        #endregion
    }
}
